package com.wnx.job.modules.pms.controller;


import com.wnx.job.common.api.Const;
import com.wnx.job.common.api.PageResult;
import com.wnx.job.common.api.QueryPageBean;
import com.wnx.job.common.api.ResultData;
import com.wnx.job.modules.jms.dto.PostParam;
import com.wnx.job.modules.jms.model.JmsCompany;
import com.wnx.job.modules.jms.model.JmsStudent;
import com.wnx.job.modules.jms.service.JmsCompanyService;
import com.wnx.job.modules.jms.service.JmsPostService;
import com.wnx.job.modules.jms.service.JmsStudentService;
import com.wnx.job.modules.pms.dto.SendParam;
import com.wnx.job.modules.pms.model.PmsPass;
import com.wnx.job.modules.pms.model.PmsSend;
import com.wnx.job.modules.pms.service.PmsPassService;
import com.wnx.job.modules.pms.service.PmsResumeService;
import com.wnx.job.modules.pms.service.PmsSendService;
import com.wnx.job.modules.rms.dto.PassParam;
import com.wnx.job.modules.rms.dto.ResumeParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.security.Principal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wangnaixing
 * @since 2021-12-17
 */
@Slf4j
@RestController
@RequestMapping("/pms/pmsSend")
@Api(tags = "SendController",description = "简历投递管理")
public class PmsSendController {

    @Resource
    private PmsSendService sendService;
    @Resource
    private PmsPassService passService;
    @Resource
    private JmsStudentService studentService;
    @Resource
    private JmsCompanyService companyService;
    @Resource
    private PmsResumeService resumeService;
    @Resource
    private JmsPostService postService;


    /**
     * 学生向公司的这个职位投递简历
     * @param postId
     * @return
     */
    @GetMapping("/sendPost/{id}")
    @ApiOperation("学生向公司的这个职位投递简历")
    public ResultData<String> sendPost(@PathVariable(name = "id")Long postId, Principal principal){
        log.info("===系统正在执行学生向公司的这个职位投递简历中===");
        //获取前端的职位ID

        String account = principal.getName();
        JmsStudent student = studentService.findByAccount(account);
        ResumeParam resumeParam = resumeService.findByStudentId(student.getId());
        PostParam post = postService.findById(postId);


        //构造简历发送对象
        PmsSend send = new PmsSend();

        //注入属性
        send.setSendTime(new Date());
        send.setPostId(post.getId());
        send.setResumeId(resumeParam.getId());
        send.setStudentId(student.getId());
        send.setCompanyId(post.getCompanyId());
        send.setStatus(Const.SEND_WAIT_SEE);

        //调用服务层，进行简历投递
        sendService.saveSend(send);

        log.info("===系统成功执行学生向公司的这个职位投递简历！！！===");
        return ResultData.success(Const.SEND_RESUME_SUCCESS);
    }



    /**
     * 查看投递本公司的学生投递情况
     * @return
     */
    @PostMapping("/findCompanySend")
    @ApiOperation("查看投递本公司的学生投递情况")
    public ResultData<PageResult<SendParam>> findCompanySend(@RequestBody QueryPageBean queryPageBean, Principal principal){
        log.info("====系统正在执行查看投递本公司的学生投递情况中====");
        JmsCompany company = companyService.findByUsername( principal.getName());
        Map<String,Object> queryParams = queryPageBean.getQueryParams();
        if (queryParams == null){queryParams = new HashMap<String,Object>(1);}
        queryParams.put("companyId",company.getId());
        queryPageBean.setQueryParams(queryParams);
        PageResult<SendParam> pageResult =  sendService.findByPage(queryPageBean);
        log.info("====系统查看投递本公司的学生投递情况成功！====");
        return ResultData.success(Const.QUERY_SEND_SUCCESS,pageResult);
    }


    /**
     * 该简历通过简历筛选，进入简历通过人员名单
     * @param sendParam
     * @return
     */
    @PostMapping("/pass")
    @ApiOperation("该简历通过公司筛选，简历进入面试人员名单。")
    public ResultData<String> pass(@RequestBody SendParam sendParam){
        log.info("========系统正在执行该简历通过公司筛选，简历进入面试人员名单中========");
        //获取前端的简历发送对象
        PmsSend sendByDb =  sendService.getById(sendParam.getId());
        sendByDb.setStatus(Const.SEND_PASS);
        sendService.updateById(sendByDb);
        //构造简历通过对象
        PmsPass pass = new PmsPass();
        BeanUtils.copyProperties(sendByDb,pass);
        pass.setStatus(Const.PASS_COMPANY_CONFIRM);
        pass.setPassTime(new Date());
        //调用服务层，新增简历通过
        passService.save(pass);
        log.info("========系统执行该简历通过公司筛选，简历进入面试人员名单成功！========");
        return ResultData.success(Const.RESUME_PASS_SUCCESS);
    }


    /**
     * 该简历没有通过该公司-筛选，设置该简历状态为不符合要求
     * @param sendParam
     * @return
     */
    @PostMapping("/noPass")
    @ApiOperation("该简历没有通过该公司-筛选，设置该简历状态为不符合要求")
    public ResultData<String> noPass(@RequestBody SendParam sendParam){
        log.info("=====系统正在设置该简历没有通过该公司-筛选，设置该简历状态为不符合要求中====");
        //获取前端的简历发送对象
        //调用服务层，修改简历发送对象状态为【不】符合要求
        PmsSend sendByDb =  sendService.getById(sendParam.getId());
        sendByDb.setStatus(Const.SEND_NO_PASS);
        sendService.updateById(sendByDb);
        log.info("=====系统设置该简历没有通过该公司-筛选，设置该简历状态为不符合要求中成功！！！====");
        return ResultData.success(Const.RESUME_PASS_FAIL);
    }


    /**
     * 修改简历发送状态为学生已经查看，简历通过状态为学生已确定
     */
    @PostMapping("/studentConfirm")
    @ApiOperation("修改简历投递状态为学生已经查看，简历通过状态为学生已确定")
    public ResultData<String> studentConfirm(@Valid @RequestBody PassParam passParam){
        log.info("系统正在修改简历发送状态为学生已经查看，简历通过状态为学生已确定中");
        //获取前端简历通过对象

        //调用服务层，修改简历通过状态为学生已确定
        PmsPass pass  =  passService.findPassByCompanyIdAndStudentId(passParam.getCompanyId(),passParam.getStudentId());
        pass.setStatus(Const.PASS_STUDENT_CONFIRM);
        passService.updateById(pass);




        //调用服务层修改简历发送状态为学生已查看
        PmsSend send = sendService.findSendByCompanyIdAndStudentId(passParam.getCompanyId(),passParam.getStudentId());
        send.setStatus(Const.SEND_AFTER_SEE);
        sendService.updateById(send);



        log.info("系统成功修改简历发送状态为学生已经查看，简历通过状态为学生已确定");
        return ResultData.success(Const.UPDATE_PASS_STATUS_SUCCESS);
    }


    /**
     * 查看学生已投递简历情况
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findStudentSend")
    @ApiOperation("查看学生已投递简历情况")
    public ResultData<PageResult<SendParam>> findStudentSend(@RequestBody QueryPageBean queryPageBean, Principal principal){
        log.info("====系统正在执行查看学生已投递简历情况中====");
        JmsStudent student = studentService.findByAccount(principal.getName());
        Map<String,Object> queryParams = queryPageBean.getQueryParams();
        queryParams.put("studentId",student.getId());
        queryPageBean.setQueryParams(queryParams);
        PageResult<SendParam> pageResult =  sendService.findByPage(queryPageBean);
        log.info("=====系统成功查看学生已投递简历情况！！！====");
        return ResultData.success(Const.QUERY_SEND_SUCCESS,pageResult);

    }


    /**
     * 根据ID删除简历投递记录
     * @return
     */
    @GetMapping("/delete/{id}")
    @ApiOperation("根据ID删除简历投递记录")
    public ResultData<String> deleteSend(@PathVariable(name = "id")Long id){
        log.info("===系统正在执行根据ID删除简历投递记录中===");
        //获取前端的投递发送ID
        sendService.removeById(id);
        log.info("===系统成功执行根据ID删除简历投递记录！！！===");
        //返回结果集对象
        return ResultData.success(Const.DELETE_SEND_SUCCESS);
    }



}

